perm filename GONG[1,LCS] blob
sn#305801 filedate 1977-09-19 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 SYNTH(F1)1 1 999
C00006 ENDMK
C⊗;
SYNTH(F1);1 1 999;
VARIABLE I,T,BELLFREQ;
BELLFREQ←1400;
ARRAY F2(512),F3(512),F4(512);
EXTERNAL FUNCTION EXP(X);
FOR I←0 STEP 1 UNTIL 511 DO
BEGIN;
F2(I)←EXP(-I/200);
F3(I)←EXP(-I/175)*(1-EXP(-(511-I)/25));
F4(I)←EXP(-I/145)*SIN(I*(PI/512));
END;
FUNCTION NORM(ARRAY A,ARRAY X);
⊂ VARIABLE M;
M←ABS(X(0));
FOR I←1 STEP 1 UNTIL 511 DO
IF ABS(X(I))>M THEN M←ABS(X(I));
FOR I←0 STEP 1 UNTIL 511 DO A(I)←X(I)/M ⊃;
NORM(F4,F4);
INSTRUMENT FM1;
COMMENT
P1 = Begin time
P2 = Duration
P3 = P2 (so that numbering is same as in article)
P4 = Amplitude
P5 = Carrier Freq.
P6 = Modulating Freq.
P7 = Modulation Index 1
P8 = Modulation Index 2
P9 = Wave form for U.G. 1 & 3
P10 = Envelope for U.G. 4 (Carrier)
P11 = Envelope for U.G. 2
;
OUTA←OUTA+NOSCIL(OSCIL(P4,MAG/(P3←P2),P10),
MAG*P5+NOSCIL(MAG*P6*P7+OSCIL(MAG*P6*(P8-P7),MAG/P3,P10),MAG*P6,P9)
P9);
END;
INSTRUMENT FM2;
OUTA←OUTA+NOSCIL(OSCIL(P4,MAG/(P3←P2),P10),
MAG*P5+NOSCIL(MAG*P6*P7+OSCIL(MAG*(P8-P7)*P6,MAG/P3,P10),MAG*P6,P9)
P9);
END;
INSTRUMENT FM3;
OUTA←OUTA+NOSCIL(OSCIL(P4,MAG/(P3←P2),P10),
MAG*P5+NOSCIL(MAG*P6*P7+OSCIL(MAG*(P8-P7)*P6,MAG/P3,P10),MAG*P6,P9)
P9);
END;
INSTRUMENT FM4;
OUTA←OUTA+NOSCIL(OSCIL(P4,MAG/(P3←P2),P10),
MAG*P5+NOSCIL(MAG*P6*P7+OSCIL(MAG*(P8-P7)*P6,MAG/P3,P10),MAG*P6,P9)
P9);
END;
INSTRUMENT FM5;
OUTA←OUTA+NOSCIL(OSCIL(P4,MAG/(P3←P2),P10),
MAG*P5+NOSCIL(MAG*P6*P7+OSCIL(MAG*(P8-P7)*P6,MAG/P3,P10),MAG*P6,P9)
P9);
END;
INSTRUMENT FM6;
OUTA←OUTA+NOSCIL(OSCIL(P4,MAG/(P3←P2),P10),
MAG*P5+NOSCIL(MAG*P6*P7+OSCIL(MAG*(P8-P7)*P6,MAG/P3,P10),MAG*P6,P9)
P9);
END;
INSTRUMENT FM7;
OUTA←OUTA+NOSCIL(OSCIL(P4,MAG/(P3←P2),P10),
MAG*P5+NOSCIL(MAG*P6*P7+OSCIL(MAG*(P8-P7)*P6,MAG/P3,P10),MAG*P6,P9)
P9);
END;
INSTRUMENT FM8;
OUTA←OUTA+NOSCIL(OSCIL(P4,MAG/(P3←P2),P10),
MAG*P5+NOSCIL(MAG*P6*P7+OSCIL(MAG*(P8-P7)*P6,MAG/P3,P10),MAG*P6,P9)
P9);
END;
INSTRUMENT FM9;
OUTA←OUTA+NOSCIL(OSCIL(P4,MAG/(P3←P2),P10),
MAG*P5+NOSCIL(MAG*P6*P7+OSCIL(MAG*(P8-P7)*P6,MAG/P3,P10),MAG*P6,P9)
P9);
END;
PRINT "FM loaded";